EF Core Interceptors এবং Logging হল দুইটি শক্তিশালী ফিচার যা ডেটাবেস অ্যাক্সেস এবং এর কার্যকলাপ ট্র্যাক করতে ব্যবহৃত হয়। Interceptors আপনাকে EF Core-এর বিভিন্ন অপারেশন যেমন, SaveChanges, Query Execution, Transaction ইত্যাদিতে হস্তক্ষেপ করার সুযোগ দেয়, এবং Logging আপনাকে আপনার অ্যাপ্লিকেশন এবং ডেটাবেসের কার্যকলাপের বিস্তারিত ট্রেস বা লগ তৈরি করতে সাহায্য করে। এগুলোর মাধ্যমে আপনি আরও ভাল ডিবাগিং, পারফরম্যান্স মনিটরিং এবং কাস্টম লগিং ফিচার তৈরি করতে পারবেন।
EF Core Interceptors হল এমন মেকানিজম যা আপনাকে EF Core-এর বিভিন্ন প্রসেসে হস্তক্ষেপ করার সুযোগ দেয়। ইন্টারসেপ্টর ব্যবহার করে আপনি SQL কমান্ড, ডেটাবেস ট্রানজেকশন, SaveChanges ইত্যাদির আগে বা পরে কাস্টম লজিক এক্সিকিউট করতে পারেন। ইন্টারসেপ্টরের মাধ্যমে আপনি লগিং, পারফরম্যান্স ট্র্যাকিং, সিকিউরিটি চেক, এবং আরো অনেক ধরনের কার্যকলাপ বাস্তবায়ন করতে পারেন।
EF Core ইন্টারসেপ্টরগুলি সাধারণত একটি নির্দিষ্ট DbContext এর ওপর কাজ করে। আপনি DbContext বা DbCommand এর ইন্টারসেপ্টর তৈরি করতে পারেন, যা আপনার প্রয়োজনে কাস্টমাইজড হতে পারে।
EF Core তে ইন্টারসেপ্টর যুক্ত করার জন্য আপনাকে IDbCommandInterceptor, IChangeTrackerInterceptor, অথবা ISaveChangesInterceptor ইন্টারফেসগুলির মধ্যে যেকোনো একটিতে ইমপ্লিমেন্টেশন করতে হবে।
উদাহরণস্বরূপ, একটি সিম্পল SaveChangesInterceptor তৈরি করা যেটি SaveChanges()
মেথডে হস্তক্ষেপ করবে এবং তখন কিছু লগ বা কাস্টম লজিক কার্যকর হবে:
public class MySaveChangesInterceptor : ISaveChangesInterceptor
{
public int SavedChanges(SaveChangesContext saveChangesContext)
{
// Custom logic before save
Console.WriteLine("Saving changes...");
return 0; // Return the result of the save operation
}
public void SaveChangesFailed(SaveChangesFailedContext saveChangesFailedContext)
{
// Handle failure
Console.WriteLine("Failed to save changes.");
}
// Optionally, implement other methods for detecting change events
}
এরপর, ইন্টারসেপ্টরটি DbContext এ রেজিস্টার করতে হবে:
public class MyDbContext : DbContext
{
private readonly MySaveChangesInterceptor _saveChangesInterceptor;
public MyDbContext(DbContextOptions<MyDbContext> options, MySaveChangesInterceptor saveChangesInterceptor)
: base(options)
{
_saveChangesInterceptor = saveChangesInterceptor;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.AddInterceptors(_saveChangesInterceptor);
}
}
এখন, যখন SaveChanges()
মেথডটি কল হবে, তখন আপনার কাস্টম ইন্টারসেপ্টর সক্রিয় হয়ে যাবে এবং সেটি ডেটা সেভ করার আগে বা পরে কার্যকর হবে।
Logging হল একটি গুরুত্বপূর্ণ টেকনিক যা অ্যাপ্লিকেশনের কার্যকলাপ, ডেটাবেস কুয়েরি, পারফরম্যান্স, এবং ত্রুটি ট্র্যাক করতে ব্যবহৃত হয়। EF Core-এ লোগিং খুবই গুরুত্বপূর্ণ, কারণ এটি ডেটাবেস কুয়েরি, ট্রানজেকশন, এবং অন্যান্য অপারেশনের ডিবাগিং এবং পারফরম্যান্স টিউনিংয়ে সাহায্য করে। EF Core এর লগিং সিস্টেম মূলত Microsoft.Extensions.Logging লাইব্রেরির মাধ্যমে কাজ করে।
EF Core এর লোগিং সিস্টেম কনফিগার করতে আপনাকে ILogger ইন্টারফেস ব্যবহার করতে হবে, যা সাধারণত ILoggerFactory এর মাধ্যমে কনফিগার করা হয়।
public class MyDbContext : DbContext
{
private readonly ILoggerFactory _loggerFactory;
public MyDbContext(DbContextOptions<MyDbContext> options, ILoggerFactory loggerFactory)
: base(options)
{
_loggerFactory = loggerFactory;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// Enabling logging
optionsBuilder.UseLoggerFactory(_loggerFactory);
optionsBuilder.EnableSensitiveDataLogging(); // Enables logging of sensitive data, like SQL queries
}
}
এখানে:
EF Core-এর লগিং সিস্টেমটি SQL কুয়েরি লগ করতে সক্ষম। আপনি লগিং সক্রিয় করার পর, EF Core আপনার কুয়েরি ও অন্যান্য কার্যকলাপ কনসোল বা ফাইল আউটপুটে রেকর্ড করবে। এটি ডিবাগিং এবং পারফরম্যান্স অপটিমাইজেশন এর জন্য খুবই কার্যকর।
var optionsBuilder = new DbContextOptionsBuilder<MyDbContext>();
optionsBuilder.UseSqlServer("YourConnectionString")
.EnableSensitiveDataLogging()
.UseLoggerFactory(LoggerFactory.Create(builder => builder.AddConsole()));
using (var context = new MyDbContext(optionsBuilder.Options))
{
var customers = context.Customers.Where(c => c.City == "New York").ToList();
}
এটি SQL কুয়েরি আউটপুট কনসোলে লগ করবে, যা আপনাকে কুয়েরি এবং তার এক্সিকিউশন টাইম বিশ্লেষণ করতে সাহায্য করবে।
আপনি চাইলে শুধু নির্দিষ্ট টাইপের লগগুলোই রেকর্ড করতে পারেন, যেমন কেবল Warning, Error, বা Information লগ। এটি আপনাকে অ্যাপ্লিকেশনটি অপটিমাইজ করতে এবং খুব বেশি লগ ডেটা না জমাতে সহায়তা করবে।
public static ILoggerFactory CreateLoggerFactory()
{
return LoggerFactory.Create(builder =>
{
builder
.AddFilter("Microsoft.EntityFrameworkCore.Database.Command", LogLevel.Information)
.AddConsole();
});
}
লগগুলোকে ফাইলে রেকর্ড করতে File Logger ব্যবহার করা যেতে পারে। আপনি Serilog, NLog, বা Log4Net এর মতো জনপ্রিয় ফাইল লগিং লাইব্রেরি ব্যবহার করতে পারেন EF Core লগিংয়ের জন্য।
EF Core Interceptors এবং Logging Techniques আপনাকে ডেটাবেসের কার্যকলাপের উপর পূর্ণ নিয়ন্ত্রণ এবং পর্যবেক্ষণ প্রদান করে। এগুলির মাধ্যমে আপনি transaction tracking, performance monitoring, এবং error handling আরও দক্ষভাবে পরিচালনা করতে পারবেন। লগিং এবং ইন্টারসেপ্টর ব্যবহারের মাধ্যমে অ্যাপ্লিকেশনটির কার্যকারিতা ও নিরাপত্তা নিশ্চিত করা সম্ভব, এবং প্রয়োজনে ডিবাগিংয়ের সময় ভুলগুলো দ্রুত চিহ্নিত করা যায়।
common.read_more